第8章 デザインパターン
このあと紹介する他のパターンも、Iteratorパターンと同じように、概念と名前が先にあるのを重視します。(Kindle版 p.322)
しかし、Template Methodで設計可能なのはひとつの系です。軸が異なる共通性が複数あると、継承はうまく機能しません。(Kindle版 p.340)
ファサードがビルの入り口にいる受付さんだとすれば、メディエーターはビルに入っている会社の内務マネージャーさんにあたります。(Kindle版 p.367)
Proxyパターンが、利用者から見たメソッドの使い方を変えずに、特定の振る舞いを拡張するラッパー (Kindle版 p.380)
あるメソッドの(引数や返り値の型は変えずに)振る舞いを拡張
Proxyが同じ型に見せかけた別の振る舞いを生み出す (Kindle版 p.384)
Decoratorパターンは、既存メソッドの振る舞いはそのままにし、新たなメソッドを追加する拡張ラッパー (Kindle版 p.380)
新しいメソッドを追加
3ついずれもオブジェクトのつなぎ合わせ方で、割って入る
目的が異なる
ここまでがモジュール構造(?)
高階関数
関数を引数や返り値として扱える
(例:Python文法のデコレータ)
そうした関数(※高階関数)の中でも、記述された文脈にある変数を束縛できる特徴を持ったものをクロージャと呼びます。(Kindle版 p.394)
プログラミングテクニックとしてのオブジェクト指向を考えるうえで、その構成要素は必ずしもクラスとは限らないのが現代のプログラミングです。(Kindle版 p.396)
単一責任原則(SRP)に従えば、メソッドを持ちすぎない小さなクラスの組み合わせで問題を解決するのが、オブジェクト指向らしい設計 (Kindle版 p.395)
「振る舞いの詳細を隠蔽した抽象」であるかぎり、それはまぎれもなくオブジェクト指向の構成要素 (Kindle版 p.396)
振る舞いを持った抽象
Command
UIとユースケースの疎結合(橋渡し)
即時実行しない
キューイング
Observer
身近な例:イベントリスナ
橋渡し(片方はサードパーティのように自分で変えられないような場合)
デフォルトはobserverの配列が空。ユーザが追加して振る舞いを足せる
Tell, Don't Ask.
トップレベルのインターフェースがひとつあれば目的を果たせるようにすべきという教え (Kindle版 p.425)